import 'dart:io';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:path/path.dart';
import 'package:crypto/crypto.dart';
import 'dart:convert';
import 'package:logger/logger.dart';

import 'app_config.dart';

/// 数据库帮助类
class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper._internal();
  static Database? _database;
  static bool _isInitialized = false;
  static final Logger _logger = Logger();

  static const int _databaseVersion = 2;  // 增加版本号以触发升级
  static const String _databaseName = 'green_hydrogen_carbon_footprint.db';

  factory DatabaseHelper() {
    return _instance;
  }

  DatabaseHelper._internal();

  /// 获取数据库实例
  Future<Database> get database async {
    if (_database != null) return _database!;
    _database = await _initDatabase();
    return _database!;
  }

  /// 获取数据库路径
  Future<String> get databasePath async {
    return await _getDatabasePath();
  }

  /// 初始化数据库工厂（跨平台支持）
  static Future<void> initializeDatabaseFactory() async {
    if (_isInitialized) return;
    
    _logger.i('💡 开始初始化数据库工厂');
    
    // 检查平台并初始化相应的数据库工厂
    if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
      // 桌面平台使用 sqflite_common_ffi
      _logger.i('💡 使用 sqflite_common_ffi 数据库工厂 (桌面平台)');
      sqfliteFfiInit();
      databaseFactory = databaseFactoryFfi;
    } else {
      // 移动平台使用默认的 sqflite（无需额外初始化）
      _logger.i('💡 使用默认 sqflite 数据库工厂 (移动平台)');
    }
    
    _isInitialized = true;
    _logger.i('�� 数据库工厂初始化成功');
  }

  /// 初始化数据库
  Future<Database> _initDatabase() async {
    // 确保数据库工厂已初始化
    await initializeDatabaseFactory();
    
    // 获取数据库路径
    final databasePath = await _getDatabasePath();
    _logger.i('💡 数据库路径: $databasePath');
    
    // 打开数据库
    return await openDatabase(
      databasePath,
      version: _databaseVersion,
      onCreate: _onCreate,
      onUpgrade: _onUpgrade,
    );
  }

  /// 获取数据库路径
  Future<String> _getDatabasePath() async {
    if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
      // 桌面平台使用当前目录下的data文件夹
      final currentDir = Directory.current.path;
      final dataDir = Directory(join(currentDir, 'data'));
      if (!await dataDir.exists()) {
        await dataDir.create(recursive: true);
      }
      return join(dataDir.path, _databaseName);
    } else {
      // 移动平台使用标准数据库路径
      final databasePath = await getDatabasesPath();
      return join(databasePath, _databaseName);
    }
  }

  /// 创建数据库表
  Future<void> _onCreate(Database db, int version) async {
    _logger.i('💡 开始创建数据库表');
    
    // 启用外键约束
    await db.execute('PRAGMA foreign_keys = ON');
    
    // 创建用户表
    await db.execute('''
      CREATE TABLE users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username VARCHAR(50) NOT NULL UNIQUE,
        password_hash VARCHAR(255) NOT NULL,
        real_name VARCHAR(100),
        email VARCHAR(100),
        phone VARCHAR(20),
        role INTEGER NOT NULL DEFAULT 1,
        department VARCHAR(100),
        position VARCHAR(100),
        is_active INTEGER NOT NULL DEFAULT 1,
        last_login_time DATETIME,
        created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        is_deleted INTEGER NOT NULL DEFAULT 0
      )
    ''');

    // 创建用户登录日志表
    await db.execute('''
      CREATE TABLE user_login_logs (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER NOT NULL,
        login_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        login_ip VARCHAR(45),
        login_device VARCHAR(200),
        login_status INTEGER NOT NULL DEFAULT 1,
        failure_reason VARCHAR(200),
        FOREIGN KEY (user_id) REFERENCES users(id)
      )
    ''');

    // 创建工艺类型表
    await db.execute('''
      CREATE TABLE process_types (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        type_code VARCHAR(20) NOT NULL UNIQUE,
        type_name VARCHAR(100) NOT NULL,
        description TEXT,
        default_emission_factor DECIMAL(10,4),
        energy_intensity DECIMAL(10,2),
        is_active INTEGER NOT NULL DEFAULT 1,
        created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
      )
    ''');

    // 创建碳足迹记录表
    await db.execute('''
      CREATE TABLE carbon_footprint_records (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        record_code VARCHAR(50) NOT NULL UNIQUE,
        record_name VARCHAR(200) NOT NULL,
        process_type INTEGER NOT NULL,
        production_capacity DECIMAL(10,2) NOT NULL,
        energy_consumption DECIMAL(10,2) NOT NULL,
        carbon_emission DECIMAL(10,2) NOT NULL,
        energy_source VARCHAR(100),
        equipment_efficiency DECIMAL(5,2),
        operation_hours INTEGER,
        location VARCHAR(200),
        project_phase VARCHAR(50),
        record_date DATE NOT NULL,
        description TEXT,
        created_by INTEGER NOT NULL,
        created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        is_deleted INTEGER NOT NULL DEFAULT 0,
        FOREIGN KEY (created_by) REFERENCES users(id)
      )
    ''');

    // 创建碳足迹详情表
    await db.execute('''
      CREATE TABLE carbon_footprint_details (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        record_id INTEGER NOT NULL,
        detail_type INTEGER NOT NULL,
        emission_source VARCHAR(100) NOT NULL,
        emission_factor DECIMAL(10,4) NOT NULL,
        activity_data DECIMAL(10,2) NOT NULL,
        emission_amount DECIMAL(10,2) NOT NULL,
        unit VARCHAR(20),
        calculation_method VARCHAR(100),
        data_source VARCHAR(200),
        uncertainty DECIMAL(5,2),
        remarks TEXT,
        created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (record_id) REFERENCES carbon_footprint_records(id)
      )
    ''');

    // 创建统计汇总表
    await db.execute('''
      CREATE TABLE statistics_summary (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        summary_date DATE NOT NULL,
        process_type_id INTEGER NOT NULL,
        total_records INTEGER NOT NULL DEFAULT 0,
        total_production DECIMAL(12,2) NOT NULL DEFAULT 0,
        total_energy_consumption DECIMAL(12,2) NOT NULL DEFAULT 0,
        total_carbon_emission DECIMAL(12,2) NOT NULL DEFAULT 0,
        avg_emission_factor DECIMAL(10,4),
        avg_energy_intensity DECIMAL(10,2),
        created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (process_type_id) REFERENCES process_types(id)
      )
    ''');

    // 创建月度统计表
    await db.execute('''
      CREATE TABLE monthly_statistics (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        year INTEGER NOT NULL,
        month INTEGER NOT NULL,
        process_type_id INTEGER NOT NULL,
        record_count INTEGER NOT NULL DEFAULT 0,
        production_volume DECIMAL(12,2) NOT NULL DEFAULT 0,
        energy_consumption DECIMAL(12,2) NOT NULL DEFAULT 0,
        carbon_emission DECIMAL(12,2) NOT NULL DEFAULT 0,
        emission_intensity DECIMAL(10,4),
        energy_intensity DECIMAL(10,2),
        created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (process_type_id) REFERENCES process_types(id),
        UNIQUE(year, month, process_type_id)
      )
    ''');

    // 创建索引
    await _createIndexes(db);

    // 插入初始数据
    await _insertInitialData(db);

    _logger.i('💡 数据库表创建完成');
  }

  /// 创建索引
  Future<void> _createIndexes(Database db) async {
    // 用户表索引
    await db.execute('CREATE INDEX idx_users_username ON users(username)');
    await db.execute('CREATE INDEX idx_users_role ON users(role)');
    await db.execute('CREATE INDEX idx_users_is_active ON users(is_active)');

    // 碳足迹记录表索引
    await db.execute('CREATE INDEX idx_carbon_records_process_type ON carbon_footprint_records(process_type)');
    await db.execute('CREATE INDEX idx_carbon_records_record_date ON carbon_footprint_records(record_date)');
    await db.execute('CREATE INDEX idx_carbon_records_created_by ON carbon_footprint_records(created_by)');
    await db.execute('CREATE INDEX idx_carbon_records_record_code ON carbon_footprint_records(record_code)');

    // 碳足迹详情表索引
    await db.execute('CREATE INDEX idx_carbon_details_record_id ON carbon_footprint_details(record_id)');
    await db.execute('CREATE INDEX idx_carbon_details_detail_type ON carbon_footprint_details(detail_type)');

    // 统计表索引
    await db.execute('CREATE INDEX idx_statistics_summary_date ON statistics_summary(summary_date)');
    await db.execute('CREATE INDEX idx_monthly_statistics_year_month ON monthly_statistics(year, month)');
  }

  /// 插入初始数据
  Future<void> _insertInitialData(Database db) async {
    _logger.i('💡 开始插入初始数据');
    
    // 插入管理员用户
    final adminUserData = {
      'username': AppConfig.defaultAdminUsername,
      'password_hash': AppConfig.defaultAdminPasswordHash,
      'real_name': '系统管理员',
      'email': 'admin@ghpfc.com',
      'phone': '13800138000',
      'role': AppConfig.roleAdmin,
      'department': '技术部',
      'position': '系统管理员',
      'is_active': 1,
      'created_at': DateTime.now().toIso8601String(),
      'updated_at': DateTime.now().toIso8601String(),
      'is_deleted': 0,
    };
    
    _logger.d('💡 插入管理员用户: ${adminUserData['username']}, 密码哈希: ${adminUserData['password_hash']}');
    
    await db.insert('users', adminUserData);
    
    // 验证插入是否成功
    final insertedUser = await db.query(
      'users',
      where: 'username = ?',
      whereArgs: [AppConfig.defaultAdminUsername],
    );
    
    if (insertedUser.isNotEmpty) {
      _logger.i('✅ 管理员用户插入成功: ${insertedUser.first}');
    } else {
      _logger.e('❌ 管理员用户插入失败');
    }

    // 插入工艺类型数据
    await db.insert('process_types', {
      'type_code': 'ELECTROLYSIS',
      'type_name': '电解水制氢',
      'description': '通过电解水工艺制备氢气',
      'default_emission_factor': 0.0000,
      'energy_intensity': 50000.00,
      'is_active': 1,
      'created_at': DateTime.now().toIso8601String(),
      'updated_at': DateTime.now().toIso8601String(),
    });

    await db.insert('process_types', {
      'type_code': 'NATURAL_GAS',
      'type_name': '天然气制氢',
      'description': '通过天然气重整工艺制备氢气',
      'default_emission_factor': 8.5000,
      'energy_intensity': 35000.00,
      'is_active': 1,
      'created_at': DateTime.now().toIso8601String(),
      'updated_at': DateTime.now().toIso8601String(),
    });

    await db.insert('process_types', {
      'type_code': 'COAL_GASIFICATION',
      'type_name': '煤制氢',
      'description': '通过煤气化工艺制备氢气',
      'default_emission_factor': 18.0000,
      'energy_intensity': 45000.00,
      'is_active': 1,
      'created_at': DateTime.now().toIso8601String(),
      'updated_at': DateTime.now().toIso8601String(),
    });

    await db.insert('process_types', {
      'type_code': 'BIOMASS',
      'type_name': '生物质制氢',
      'description': '通过生物质转化工艺制备氢气',
      'default_emission_factor': 2.5000,
      'energy_intensity': 40000.00,
      'is_active': 1,
      'created_at': DateTime.now().toIso8601String(),
      'updated_at': DateTime.now().toIso8601String(),
    });

    // 插入测试用户
    final testUsers = [
      {
        'username': 'operator1',
        'password_hash': DatabaseHelper.hashPassword('operator123'),
        'real_name': '张工程师',
        'email': 'zhang@ghpfc.com',
        'phone': '13800138001',
        'role': 1,
        'department': '生产部',
        'position': '工艺工程师',
        'is_active': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'username': 'operator2',
        'password_hash': DatabaseHelper.hashPassword('operator123'),
        'real_name': '李技术员',
        'email': 'li@ghpfc.com',
        'phone': '13800138002',
        'role': 1,
        'department': '技术部',
        'position': '技术员',
        'is_active': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'username': 'manager1',
        'password_hash': DatabaseHelper.hashPassword('manager123'),
        'real_name': '王经理',
        'email': 'wang@ghpfc.com',
        'phone': '13800138003',
        'role': 2,
        'department': '管理部',
        'position': '项目经理',
        'is_active': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
    ];

    for (final user in testUsers) {
      await db.insert('users', user);
    }

    // 插入测试碳足迹记录
    final testRecords = [
      // 电解水制氢记录
      {
        'record_code': 'CFP-20250101-090000-001',
        'record_name': '电解水制氢项目A',
        'process_type': 1,
        'production_capacity': 100.0,
        'energy_consumption': 5000.0,
        'carbon_emission': 0.0,
        'energy_source': '可再生能源',
        'equipment_efficiency': 85.0,
        'operation_hours': 720,
        'location': '江苏省苏州市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-01',
        'description': '使用可再生能源的电解水制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250102-100000-002',
        'record_name': '电解水制氢项目B',
        'process_type': 1,
        'production_capacity': 150.0,
        'energy_consumption': 7500.0,
        'carbon_emission': 0.0,
        'energy_source': '风电',
        'equipment_efficiency': 88.0,
        'operation_hours': 800,
        'location': '内蒙古呼和浩特',
        'project_phase': '试运行',
        'record_date': '2025-01-02',
        'description': '基于风电的电解水制氢示范项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 天然气制氢记录
      {
        'record_code': 'CFP-20250103-110000-003',
        'record_name': '天然气制氢项目A',
        'process_type': 2,
        'production_capacity': 200.0,
        'energy_consumption': 7000.0,
        'carbon_emission': 1700.0,
        'energy_source': '天然气',
        'equipment_efficiency': 82.0,
        'operation_hours': 750,
        'location': '新疆乌鲁木齐',
        'project_phase': '运行阶段',
        'record_date': '2025-01-03',
        'description': '天然气重整制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250104-120000-004',
        'record_name': '天然气制氢项目B',
        'process_type': 2,
        'production_capacity': 180.0,
        'energy_consumption': 6300.0,
        'carbon_emission': 1530.0,
        'energy_source': '天然气',
        'equipment_efficiency': 85.0,
        'operation_hours': 720,
        'location': '四川省成都市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-04',
        'description': '高效天然气制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 煤制氢记录
      {
        'record_code': 'CFP-20250105-130000-005',
        'record_name': '煤制氢项目A',
        'process_type': 3,
        'production_capacity': 300.0,
        'energy_consumption': 13500.0,
        'carbon_emission': 5400.0,
        'energy_source': '煤炭',
        'equipment_efficiency': 78.0,
        'operation_hours': 800,
        'location': '山西省太原市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-05',
        'description': '煤气化制氢项目',
        'created_by': 3,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250106-140000-006',
        'record_name': '煤制氢项目B',
        'process_type': 3,
        'production_capacity': 250.0,
        'energy_consumption': 11250.0,
        'carbon_emission': 4500.0,
        'energy_source': '煤炭',
        'equipment_efficiency': 80.0,
        'operation_hours': 750,
        'location': '陕西省西安市',
        'project_phase': '试运行',
        'record_date': '2025-01-06',
        'description': '高效煤气化制氢项目',
        'created_by': 3,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 生物质制氢记录
      {
        'record_code': 'CFP-20250107-150000-007',
        'record_name': '生物质制氢项目A',
        'process_type': 4,
        'production_capacity': 80.0,
        'energy_consumption': 3200.0,
        'carbon_emission': 200.0,
        'energy_source': '生物质',
        'equipment_efficiency': 75.0,
        'operation_hours': 600,
        'location': '黑龙江省哈尔滨市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-07',
        'description': '生物质气化制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250108-160000-008',
        'record_name': '生物质制氢项目B',
        'process_type': 4,
        'production_capacity': 120.0,
        'energy_consumption': 4800.0,
        'carbon_emission': 300.0,
        'energy_source': '生物质',
        'equipment_efficiency': 78.0,
        'operation_hours': 700,
        'location': '吉林省长春市',
        'project_phase': '试运行',
        'record_date': '2025-01-08',
        'description': '高效生物质制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 更多测试记录 - 不同时间段的记录
      {
        'record_code': 'CFP-20250110-090000-009',
        'record_name': '电解水制氢项目C',
        'process_type': 1,
        'production_capacity': 120.0,
        'energy_consumption': 6000.0,
        'carbon_emission': 0.0,
        'energy_source': '太阳能',
        'equipment_efficiency': 90.0,
        'operation_hours': 650,
        'location': '青海省西宁市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-10',
        'description': '基于太阳能的电解水制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250115-100000-010',
        'record_name': '天然气制氢项目C',
        'process_type': 2,
        'production_capacity': 220.0,
        'energy_consumption': 7700.0,
        'carbon_emission': 1870.0,
        'energy_source': '天然气',
        'equipment_efficiency': 87.0,
        'operation_hours': 780,
        'location': '河北省石家庄市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-15',
        'description': '高效天然气制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250120-110000-011',
        'record_name': '煤制氢项目C',
        'process_type': 3,
        'production_capacity': 280.0,
        'energy_consumption': 12600.0,
        'carbon_emission': 5040.0,
        'energy_source': '煤炭',
        'equipment_efficiency': 82.0,
        'operation_hours': 820,
        'location': '河南省郑州市',
        'project_phase': '试运行',
        'record_date': '2025-01-20',
        'description': '高效煤气化制氢项目',
        'created_by': 3,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250125-120000-012',
        'record_name': '生物质制氢项目C',
        'process_type': 4,
        'production_capacity': 100.0,
        'energy_consumption': 4000.0,
        'carbon_emission': 250.0,
        'energy_source': '生物质',
        'equipment_efficiency': 80.0,
        'operation_hours': 680,
        'location': '辽宁省沈阳市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-25',
        'description': '高效生物质制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
    ];

    for (final record in testRecords) {
      await db.insert('carbon_footprint_records', record);
    }

    _logger.i('💡 初始数据插入完成');
  }

  /// 数据库升级
  Future<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {
    _logger.i('💡 数据库升级: $oldVersion -> $newVersion');
    
    if (oldVersion < 2) {
      // 版本1到版本2的升级逻辑
      // 修正管理员用户的密码哈希值
      await _fixAdminPasswordHash(db);
    }
  }

  /// 修正管理员密码哈希值
  Future<void> _fixAdminPasswordHash(Database db) async {
    _logger.i('💡 开始修正管理员密码哈希值');
    
    try {
      // 查询现有的管理员用户
      final adminUsers = await db.query(
        'users',
        where: 'username = ?',
        whereArgs: [AppConfig.defaultAdminUsername],
      );
      
      if (adminUsers.isNotEmpty) {
        final oldHash = adminUsers.first['password_hash'] as String;
        final correctHash = AppConfig.defaultAdminPasswordHash;
        
        if (oldHash != correctHash) {
          _logger.w('💡 检测到错误的密码哈希值，正在修正...');
          _logger.d('💡 旧哈希: $oldHash');
          _logger.d('💡 新哈希: $correctHash');
          
          // 更新密码哈希值
          await db.update(
            'users',
            {'password_hash': correctHash},
            where: 'username = ?',
            whereArgs: [AppConfig.defaultAdminUsername],
          );
          
          _logger.i('✅ 管理员密码哈希值修正成功');
        } else {
          _logger.i('✅ 管理员密码哈希值已正确');
        }
      } else {
        _logger.w('⚠️ 未找到管理员用户，将重新创建');
        // 如果管理员用户不存在，重新创建
        await _insertInitialData(db);
      }
    } catch (e) {
      _logger.e('❌ 修正管理员密码哈希值失败: $e');
    }
  }

  /// 密码加密
  static String hashPassword(String password) {
    var bytes = utf8.encode(password);
    var digest = sha256.convert(bytes);
    return digest.toString();
  }

  /// 验证密码
  static bool verifyPassword(String password, String hash) {
    return hashPassword(password) == hash;
  }

  /// 强制重新创建数据库（用于开发调试）
  Future<void> forceRecreateDatabase() async {
    _logger.w('⚠️ 强制重新创建数据库');
    
    // 关闭现有数据库连接
    if (_database != null) {
      await _database!.close();
      _database = null;
    }
    
    // 删除数据库文件
    final databasePath = await _getDatabasePath();
    final databaseFile = File(databasePath);
    if (await databaseFile.exists()) {
      await databaseFile.delete();
      _logger.i('💡 已删除旧数据库文件: $databasePath');
    }
    
    // 重新创建数据库
    await _initDatabase();
    _logger.i('✅ 数据库重新创建完成');
  }

  /// 关闭数据库
  Future<void> close() async {
    if (_database != null) {
      await _database!.close();
      _database = null;
    }
  }

  /// 重置测试数据（仅用于开发测试）
  Future<void> resetTestData() async {
    _logger.w('⚠️ 重置测试数据');
    
    final db = await database;
    
    // 删除现有数据
    await db.delete('carbon_footprint_records');
    await db.delete('users', where: 'username != ?', whereArgs: [AppConfig.defaultAdminUsername]);
    
    // 重新插入测试数据
    await _insertTestData(db);
    
    _logger.i('✅ 测试数据重置完成');
  }

  /// 插入测试数据
  Future<void> _insertTestData(Database db) async {
    _logger.i('💡 开始插入测试数据');
    
    // 插入测试用户
    final testUsers = [
      {
        'username': 'operator1',
        'password_hash': DatabaseHelper.hashPassword('operator123'),
        'real_name': '张工程师',
        'email': 'zhang@ghpfc.com',
        'phone': '13800138001',
        'role': 1,
        'department': '生产部',
        'position': '工艺工程师',
        'is_active': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'username': 'operator2',
        'password_hash': DatabaseHelper.hashPassword('operator123'),
        'real_name': '李技术员',
        'email': 'li@ghpfc.com',
        'phone': '13800138002',
        'role': 1,
        'department': '技术部',
        'position': '技术员',
        'is_active': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'username': 'manager1',
        'password_hash': DatabaseHelper.hashPassword('manager123'),
        'real_name': '王经理',
        'email': 'wang@ghpfc.com',
        'phone': '13800138003',
        'role': 2,
        'department': '管理部',
        'position': '项目经理',
        'is_active': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
    ];

    for (final user in testUsers) {
      await db.insert('users', user);
    }

    // 插入测试碳足迹记录
    final testRecords = [
      // 电解水制氢记录
      {
        'record_code': 'CFP-20250101-090000-001',
        'record_name': '电解水制氢项目A',
        'process_type': 1,
        'production_capacity': 100.0,
        'energy_consumption': 5000.0,
        'carbon_emission': 0.0,
        'energy_source': '可再生能源',
        'equipment_efficiency': 85.0,
        'operation_hours': 720,
        'location': '江苏省苏州市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-01',
        'description': '使用可再生能源的电解水制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250102-100000-002',
        'record_name': '电解水制氢项目B',
        'process_type': 1,
        'production_capacity': 150.0,
        'energy_consumption': 7500.0,
        'carbon_emission': 0.0,
        'energy_source': '风电',
        'equipment_efficiency': 88.0,
        'operation_hours': 800,
        'location': '内蒙古呼和浩特',
        'project_phase': '试运行',
        'record_date': '2025-01-02',
        'description': '基于风电的电解水制氢示范项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 天然气制氢记录
      {
        'record_code': 'CFP-20250103-110000-003',
        'record_name': '天然气制氢项目A',
        'process_type': 2,
        'production_capacity': 200.0,
        'energy_consumption': 7000.0,
        'carbon_emission': 1700.0,
        'energy_source': '天然气',
        'equipment_efficiency': 82.0,
        'operation_hours': 750,
        'location': '新疆乌鲁木齐',
        'project_phase': '运行阶段',
        'record_date': '2025-01-03',
        'description': '天然气重整制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250104-120000-004',
        'record_name': '天然气制氢项目B',
        'process_type': 2,
        'production_capacity': 180.0,
        'energy_consumption': 6300.0,
        'carbon_emission': 1530.0,
        'energy_source': '天然气',
        'equipment_efficiency': 85.0,
        'operation_hours': 720,
        'location': '四川省成都市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-04',
        'description': '高效天然气制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 煤制氢记录
      {
        'record_code': 'CFP-20250105-130000-005',
        'record_name': '煤制氢项目A',
        'process_type': 3,
        'production_capacity': 300.0,
        'energy_consumption': 13500.0,
        'carbon_emission': 5400.0,
        'energy_source': '煤炭',
        'equipment_efficiency': 78.0,
        'operation_hours': 800,
        'location': '山西省太原市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-05',
        'description': '煤气化制氢项目',
        'created_by': 3,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250106-140000-006',
        'record_name': '煤制氢项目B',
        'process_type': 3,
        'production_capacity': 250.0,
        'energy_consumption': 11250.0,
        'carbon_emission': 4500.0,
        'energy_source': '煤炭',
        'equipment_efficiency': 80.0,
        'operation_hours': 750,
        'location': '陕西省西安市',
        'project_phase': '试运行',
        'record_date': '2025-01-06',
        'description': '高效煤气化制氢项目',
        'created_by': 3,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 生物质制氢记录
      {
        'record_code': 'CFP-20250107-150000-007',
        'record_name': '生物质制氢项目A',
        'process_type': 4,
        'production_capacity': 80.0,
        'energy_consumption': 3200.0,
        'carbon_emission': 200.0,
        'energy_source': '生物质',
        'equipment_efficiency': 75.0,
        'operation_hours': 600,
        'location': '黑龙江省哈尔滨市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-07',
        'description': '生物质气化制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250108-160000-008',
        'record_name': '生物质制氢项目B',
        'process_type': 4,
        'production_capacity': 120.0,
        'energy_consumption': 4800.0,
        'carbon_emission': 300.0,
        'energy_source': '生物质',
        'equipment_efficiency': 78.0,
        'operation_hours': 700,
        'location': '吉林省长春市',
        'project_phase': '试运行',
        'record_date': '2025-01-08',
        'description': '高效生物质制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      // 更多测试记录 - 不同时间段的记录
      {
        'record_code': 'CFP-20250110-090000-009',
        'record_name': '电解水制氢项目C',
        'process_type': 1,
        'production_capacity': 120.0,
        'energy_consumption': 6000.0,
        'carbon_emission': 0.0,
        'energy_source': '太阳能',
        'equipment_efficiency': 90.0,
        'operation_hours': 650,
        'location': '青海省西宁市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-10',
        'description': '基于太阳能的电解水制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250115-100000-010',
        'record_name': '天然气制氢项目C',
        'process_type': 2,
        'production_capacity': 220.0,
        'energy_consumption': 7700.0,
        'carbon_emission': 1870.0,
        'energy_source': '天然气',
        'equipment_efficiency': 87.0,
        'operation_hours': 780,
        'location': '河北省石家庄市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-15',
        'description': '高效天然气制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250120-110000-011',
        'record_name': '煤制氢项目C',
        'process_type': 3,
        'production_capacity': 280.0,
        'energy_consumption': 12600.0,
        'carbon_emission': 5040.0,
        'energy_source': '煤炭',
        'equipment_efficiency': 82.0,
        'operation_hours': 820,
        'location': '河南省郑州市',
        'project_phase': '试运行',
        'record_date': '2025-01-20',
        'description': '高效煤气化制氢项目',
        'created_by': 3,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250125-120000-012',
        'record_name': '生物质制氢项目C',
        'process_type': 4,
        'production_capacity': 100.0,
        'energy_consumption': 4000.0,
        'carbon_emission': 250.0,
        'energy_source': '生物质',
        'equipment_efficiency': 80.0,
        'operation_hours': 680,
        'location': '辽宁省沈阳市',
        'project_phase': '运行阶段',
        'record_date': '2025-01-25',
        'description': '高效生物质制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
    ];

    for (final record in testRecords) {
      await db.insert('carbon_footprint_records', record);
    }

    _logger.i('💡 测试数据插入完成');
  }

  /// 添加额外测试数据（用于扩展测试）
  Future<void> addExtraTestData() async {
    _logger.i('💡 添加额外测试数据');
    
    final db = await database;
    
    // 添加更多不同时间段的记录
    final extraRecords = [
      {
        'record_code': 'CFP-20250201-090000-013',
        'record_name': '电解水制氢项目D',
        'process_type': 1,
        'production_capacity': 200.0,
        'energy_consumption': 10000.0,
        'carbon_emission': 0.0,
        'energy_source': '水电',
        'equipment_efficiency': 92.0,
        'operation_hours': 850,
        'location': '云南省昆明市',
        'project_phase': '运行阶段',
        'record_date': '2025-02-01',
        'description': '基于水电的电解水制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250205-100000-014',
        'record_name': '天然气制氢项目D',
        'process_type': 2,
        'production_capacity': 250.0,
        'energy_consumption': 8750.0,
        'carbon_emission': 2125.0,
        'energy_source': '天然气',
        'equipment_efficiency': 89.0,
        'operation_hours': 800,
        'location': '山东省济南市',
        'project_phase': '运行阶段',
        'record_date': '2025-02-05',
        'description': '高效天然气制氢项目',
        'created_by': 2,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250210-110000-015',
        'record_name': '煤制氢项目D',
        'process_type': 3,
        'production_capacity': 350.0,
        'energy_consumption': 15750.0,
        'carbon_emission': 6300.0,
        'energy_source': '煤炭',
        'equipment_efficiency': 85.0,
        'operation_hours': 850,
        'location': '安徽省合肥市',
        'project_phase': '试运行',
        'record_date': '2025-02-10',
        'description': '高效煤气化制氢项目',
        'created_by': 3,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
      {
        'record_code': 'CFP-20250215-120000-016',
        'record_name': '生物质制氢项目D',
        'process_type': 4,
        'production_capacity': 150.0,
        'energy_consumption': 6000.0,
        'carbon_emission': 375.0,
        'energy_source': '生物质',
        'equipment_efficiency': 83.0,
        'operation_hours': 750,
        'location': '湖北省武汉市',
        'project_phase': '运行阶段',
        'record_date': '2025-02-15',
        'description': '高效生物质制氢项目',
        'created_by': 1,
        'created_at': DateTime.now().toIso8601String(),
        'updated_at': DateTime.now().toIso8601String(),
        'is_deleted': 0,
      },
    ];

    for (final record in extraRecords) {
      await db.insert('carbon_footprint_records', record);
    }

    _logger.i('✅ 额外测试数据添加完成');
  }

  /// 获取测试数据统计信息
  Future<Map<String, dynamic>> getTestDataStats() async {
    final db = await database;
    
    final userCount = await db.rawQuery('SELECT COUNT(*) as count FROM users WHERE is_deleted = 0');
    final recordCount = await db.rawQuery('SELECT COUNT(*) as count FROM carbon_footprint_records WHERE is_deleted = 0');
    final processTypeCount = await db.rawQuery('SELECT COUNT(*) as count FROM process_types WHERE is_active = 1');
    
    return {
      'users': userCount.first['count'] as int,
      'records': recordCount.first['count'] as int,
      'process_types': processTypeCount.first['count'] as int,
    };
  }
} 